/**
 * 
 */
package br.unifor.mia.cd.middleware.arcademis.marshalable;

import arcademis.MarshalException;
import arcademis.Stream;

/**
 * Interface responsável por serializar um objeto no stream.
 * <br>
 * Pode obter diferentes tipos de serialização: por exemplo:<br>
 * - Anotações: {@link br.unifor.mia.cd.middleware.arcademis.marshalable.Marshalable},
 * ver {@link MarshallerAnnotationMechanism} <br>
 * - Iplementação da interface {@link arcademis.Marshalable}, ver {@link MarshallerInterfaceMechanism}<br>
 * 
 * @author landim
 */
public interface MarshallerMechanism {
	/**
	 * Método responsável por serializar um objeto
	 * @param stream
	 * @param bean
	 */
	void marshall(Stream stream, Object bean) throws MarshalException;
	/**
	 * Método responsável por deserializar um objeto
	 * @param stream
	 * @param bean
	 * @return obejeto deserializado
	 */
	Object unmarshall(Stream stream, Object bean) throws MarshalException;
}
